<?php 
/*
	PDO中事务处理方法
	-------------------------------------------
	beginTransaction() 启动一个事务
	commit()           提交一个事务
	rollBack()         回滚一个事务
	inTransaction()    检测是否在一个内

	---------补充---------
	事务(transaction)是由查询和/或更新语句的序列组成。 用 begin、start transaction
	开始一个事务，rollback 回滚事务，commit 提交事务。 在开始一个事务后，可以有若干个 SQL 查询或更新语句，每个 SQL
	递交执行后，还应该有判断是否正确执行的语句，以确定下一步是否回滚，若都被正确执行则最后提交事务。
	事务一旦回滚，数据库则保持开始事务前状态。就好象一个被编辑的文件不存盘退出，自然还是保持文件原来的样子。
	所以，事务可被视为原子操作，事务中的 SQL，要么全部执行，要不一句都不执行。
	------------------------------------------------------------
	+引擎必须为：  engine=innodb;
	------------------------------------------------------------
*/


try {
	$options = array(PDO::ATTR_AUTOCOMMIT,0);
	$pdo = new PDO('mysql:local=localhoat; dbname=exercise', 'root', 'root', $options);
	var_dump($pdo->inTransaction());
	//开启事务
	$pdo->beginTransaction();
	var_dump($pdo->inTransaction());
	$sql = 'update useraccount set money=money-2000 where username="food"';
	$res1 = $pdo->exec($sql);
	if($res1==0){
		throw new PDOException("food转账失败！！！");
	}
	$sql = 'update useraccount set money=money+2000 where username="junk"';
	$res2 = $pdo->exec($sql);
	if($res2==0){
		throw new PDOException("junk接收失败！！！");
	}
	//提交事务
	$pdo->commit();


} catch(PDOException $e) {
	//回滚事务
	$pdo->rollBack();
	echo $e->getMessage();
}



 ?>